/**
 * 螺旋矩阵
 * @param {*} n 行
 * @param {*} m 列
 */
function vortex(n, m) {
  const nums = new Array(n).fill(0).map(() => new Array(m).fill(0))
  // 填充数组
  let count = 1
  let i = 0 // 行的索引
  let j = 0 // 列的索引
  let stepi = 0 // 行的步长
  let stepj = 1 // 列的步长
  // 判断是否已经填充过，初始值都是0
  function _isBlock() {
    // 下一行是否有值
    return !nums[i + stepi] || nums[i + stepi][j + stepj] !== 0
  }
  while (1) {
    nums[i][j] = count++
    if (_isBlock()) {
      if (stepi === 0) {
        stepi = stepj
        stepj = 0
      } else {
        stepj = -stepi
        stepi = 0
      }
      if (_isBlock()) {
        break
      }
    }
    i += stepi
    j += stepj
  }

  return nums
}
console.log(vortex(4, 5))
